package main

import "fmt"

// channel 是有类型的管道，可以用channel操作符 <- 对其发送或者接收值
// 和map与slice一样， channe使用前必须创建
func sum(a []int, c chan int) {
	sum := 0
	for _, v := range a {
		sum += v
	}
	c <- sum // 将和送入c
//	close(c)   // 只有发送者才关闭channels ，xp
}

func main() {
	a := []int{7, 2, 8, -9, 4, 0}
	
	// 默认情况下， 在另一端准备好之前，发送和接收都会阻塞。 
	c := make(chan int, 2)  // 设置缓冲 只有在缓冲区慢或者空的时候阻塞
	go sum(a[:len(a)/2], c)
	go sum(a[len(a)/2:], c)
	x, y := <-c, <-c // 从c中获取
	// 接收者可以通过 
	// _, ok := <-c
	// fmt.Println(ok)
	fmt.Println(x, y, x+y)
}